iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 6
0

Comparing Structures and Classes

Structures and classes in Swift have many things in common. Both can:

  • Define properties to store values
  • Define methods to provide functionality
  • Define subscripts to provide access to their values using subscript syntax
  • Define initializers to set up their initial state
  • Be extended to expand their functionality beyond a default implementation
  • Conform to protocols to provide standard functionality of a certain kind

Classes have additional capabilities:

  • Inheritance enables one class to inherit the characteristics of another.
  • Type casting enables you to check and interpret the type of a class instance at runtime.
  • Deinitializers enable an instance of a class to free up any resources it has assigned.
  • Reference counting allows more than one reference to a class instance.

Copy by:

Structures and Enumerations Are Value Types

Classes Are Reference Types

Classes和Structures之間的選擇

Classes和Structures都可以用來自定需要的資料結構。

總之,Structures實例總是通過Value Types來傳遞,而類別是通過Reference來傳遞。這意味著他們分別適用於不同類型的任務。當你考慮你程式中資料結構和功能的時候,你需要決定把個別資料結構定義成Classes還是Structures。

當符合以下一條或多條情形時應考慮創建一個Struct而不是Class:

  • 主要目的是為了封裝一些相關的簡單資料
  • 需要封裝的資料是使用 Value Type 而不是 Reference Type
  • 不需要從一個已存在類別繼承屬性或者方法
  • struct 的使用定位比較像是儲存資料。
  • class則是著重在流程控制,程式功能導向。

為何 apple 要創建 struct :

  1. Struct 無法繼承
  • 因為傳統繼承關係太過笨重且不靈活,蘋果為解決此問題使用了Protocols的概念,大幅的改進了繼承的缺點。
  1. Struct 擁有成員建構子 (Memberwise Initializer)
  • Swift除了安全、快速、易讀性之外還有簡單、現代化的特性,此處的成員建構子就是個很典型的例子。Struct 在你呼叫時就會給你成員建構子讓你填入外部參數達到初始化。
  1. Struct 是 Value Type , Class 是 Reference Type
  • 如我上面所講述,為了安全的緣故,蘋果大力的提倡身為 Value Type 的 Struct 以防值不正常覆蓋。
  1. Struct 不能直接修改內部屬性,如果要修改必須加上 mutating

  2. 安全、安全 還是安全

  3. struct 是 Copy-on-write,所以只有在修改 struct 的值時才會被複製一份。


上一篇
單身痛? 單身狗的痛
下一篇
Auto Layout?是啥,能吃嗎
系列文
iOS 開發:燃燒吧! 從初心者到超級初心者的轉職之旅30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言